import localforage from 'localforage';

// 存储键名（统一管理，避免冲突）
export const STORAGE_KEYS = {
  CANVAS_STATE: 'canvas-editor_canvas-state', // 画布状态
  ELEMENTS: 'canvas-editor_elements', // 元素数据
};

/**
 * 存储数据到本地（支持对象/数组，自动序列化）
 * @param key 存储键名（从 STORAGE_KEYS 取值）
 * @param data 要存储的数据
 */
export async function saveToStorage<T>(key: string, data: T): Promise<void> {
  try {
    await localforage.setItem(key, data);
  } catch (error) {
    console.error(`[存储失败] key: ${key}`, error);
  }
}

/**
 * 从本地读取数据
 * @param key 存储键名（从 STORAGE_KEYS 取值）
 * @returns 存储的数据（自动反序列化），无数据则返回 null
 */
export async function getFromStorage<T>(key: string): Promise<T | null> {
  try {
    const data = await localforage.getItem<T>(key);
    return data || null;
  } catch (error) {
    console.error(`[读取失败] key: ${key}`, error);
    return null;
  }
}

/**
 * 清除指定键的存储数据
 * @param key 存储键名（从 STORAGE_KEYS 取值）
 */
export async function clearStorage(key: string): Promise<void> {
  try {
    await localforage.removeItem(key);
  } catch (error) {
    console.error(`[清除失败] key: ${key}`, error);
  }
}

/**
 * 清除所有持久化数据（慎用！）
 */
export async function clearAllStorage(): Promise<void> {
  try {
    await localforage.clear();
  } catch (error) {
    console.error('[清除所有存储失败]', error);
  }
}